package com.holly.unit.bpmn.designer.core.bpmn;

import org.activiti.bpmn.model.*;

import java.util.List;

/**
 * 类描述: 创建BPMN规范元素抽象工厂
 *
 * @author fxr
 * @version 1.0.0
 * @date 2022/5/12 10:30
 */
public interface BpmnModelFactory {


    /***
     * 创建开始节点
     * @param id
     * @return
     */
    StartEvent createStartEvent(String id,String name);

    /***
     * 创建用户任务
     * @param id
     * @param name
     * @param assignee
     * @return
     */
    UserTask createUserTask(String id,String name,String assignee);

    /***
     * 创建指定用户任务
     * @param id
     * @param name
     * @param userIds
     * @return
     */
    UserTask createCandidateUsersTask(String id,String name,List<String> userIds);

    /***
     * 创建指定角色用户任务
     * @param id
     * @param name
     * @return
     */
    UserTask createCandidateGroupsTask(String id,String name,List<String> roleIds);

    /***
     * 创建发起人自己任务或者输入用户的任务
     * @param id
     * @param name
     * @param assignee
     * @return
     */
    UserTask createAssigneeUserTask(String id,String name,String assignee);


    /***
     * 创建会签指定人员用户任务
     * @param id
     * @param name
     * @param assigneeList
     * @param assigneeName
     * @return
     */
    UserTask createCountersignCandidateUsersTask(String id, String name, String assigneeList,
                                                 String assigneeName,String completionCondition,
                                                 String assignee,List<String> userIds);

    /***
     * 创建会签指定角色用户任务
     * @param id
     * @param name
     * @param assigneeList
     * @param assigneeName
     * @return
     */
    UserTask createCountersignCandidateGroupsTask(String id, String name, String assigneeList,
                                                 String assigneeName,String completionCondition,
                                                 String assignee,List<String> roleIds);

    /***
     * 创建会签发起人自己任务或者输入用户的任务
     * @param id
     * @param name
     * @param assigneeName
     * @return
     */
    UserTask createCountersignAssigneeTask(String id, String name,
                                           String assigneeName,
                                           String completionCondition,
                                           String assignee);

    /***
     * 创建服务任务
     * @param id
     * @param name
     * @param properties
     * @return
     */
    ServiceTask createServiceTask(String id,String name,List<CustomProperty> properties);

    /***
     * 创建连线
     * @param sourceRef 源
     * @param targetRef 目标
     * @return
     */
    SequenceFlow createSequenceFlow(String sourceRef,String targetRef);

    /***
     * 创建连线带条件
     * @param sourceRef 源
     * @param targetRef 目标
     * @return
     */
    SequenceFlow createSequenceFlow(String sourceRef,String targetRef,String name,String expression);

    /***
     * 创建排他网关
     * @param id
     * @param name
     * @return
     */
    ExclusiveGateway createExclusiveGateway(String id,String name);

    /***
     * 创建并行网关
     * @param id
     * @param name
     * @return
     */
    ParallelGateway createParallelGateway(String id,String name);

    /***
     * 创建结束节点
     * @return
     */
    EndEvent createEndEvent();
}
